package com.hyb.algorithm.data.struct.list;

/**
 * @Author: huyanbing
 * @Date: 2021/9/5 3:47 下午
 */
public class ReverseN {

    public static void main(String[] args) {

    }


    //后驱节点
    private ListNode successor = null;

    /**
     * 反转以 head 为起点的 n 个节点，返回新的头结点
     *
     * @param head
     * @param n
     * @return
     */
    public ListNode reverseN(ListNode head, int n) {
        if (n == 1) {
            // 记录第 n + 1 个节点
            successor = head.next;
            return head;
        }

        // 以 head.next 为起点，需要反转前 n - 1 个节点
        ListNode last = reverseN(head.next, n - 1);
        head.next.next = head;

        // 让反转之后的 head 节点和后⾯的节点连起来
        head.next = successor;
        return last;
    }
}
